//////////////////////////////////////////////////////////////////////////
//
// NO_Type.cpp
//
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
#define NO_TAL_EXPORT

//////////////////////////////////////////////////////////////////////////
#include "NO_Externs.h"
#include "NO_TypeList.h"
#include "NO_Type.h"

//////////////////////////////////////////////////////////////////////////
NO_TypeList NO_TypeList::empty;

//////////////////////////////////////////////////////////////////////////
// List
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
NO_TypeList& NO_TypeList::operator<<(const NO_Type& obj)
{
	list.push_back(&obj);
	return *this;
}

//////////////////////////////////////////////////////////////////////////
NO_UInt32 NO_TypeList::getID(void)const
{
	NO_UInt32 id = 0;
	ListIter piter = list.begin();
	ListIter pend = list.end();

	while(piter != pend)
	{
		id += ((*piter)->getID());
		id += (id << 10);
		id ^= (id >> 6);
		++piter;
	}
	id += (id << 3);
	id ^= (id >> 11);
	id += (id << 15);
	
	return (id);
}

